#ifndef SCHEDULER_H
#define SCHEDULER_H

#include <iostream>
#include <queue>
#include <list>
#include "Process.h"
#include "MultQueue.cc"
#include "Processor.cc"

using namespace std;

class Scheduler{
	protected:
		list<Process>* processList;
		priority_queue<Process>* pq;
		Processor* allProcessors;
		list<Process>* waitingProcesses;
		list<Process>* finishedProcesses;
		priority_queue<Process>* SRTFwaiting;
		priority_queue<Process>* priorityWaiting;
		queue<Process>* MLqueue;
		void display(ostream& os) const;

	public:
		int userProcess;
		int processID;
		int numQueues;
		int numProc;
		int numQuant;
		int agingTime;
		priority_queue<Process>* tempPQ;
		Scheduler();
		Scheduler(list<Process>* processList, int processID,int numQueue, int numProcess, int numQuantum, int ageTime);
		~Scheduler();
		void callScheduler();
		void FCFS();
		void SRTF();
		void Priority();
		void preEmptive();
		void RR();
		void printResults();
		void printGantt(int Proc);
		void MFQS();
		void HRN();
		friend ostream& operator <<(ostream& os, const Scheduler& aScheduler){aScheduler.display(os);return os;};

};
#endif


